package 哈希表;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/3/16 9:02
 */
public class leetcode2488统计中位数为K的子数组 {



    /*
     要求比较苛刻， 递增， 连续，k 还需要在中间
     直接 二分到 k 的下标，以 k 为中心，向两边枚举
     但是 这种写法，考虑的情况 不太好写， 感觉很好写， 但是写不出来
     可能是状态不好

     ==
     思路有点错了 已经!
     正确思路 : 前缀和 + hash表
     */
    public int solution(int nums[],int k){
        int i = binarySearch(nums, k);
        int count = 1;
        int l = i ,r = i ;
        // 先过滤一下
        if(r == nums.length - 1 || nums[r + 1] < k ){
            return count;
        }
        //
//        int min = k,max = k;
        while(l >= 0 || r < nums.length){
//            if(nums[l] < nums[l + 1] && nums[r] > nums[r - 1]){
//                count++;
//            }
            if(l - 1 >= 0 && nums[l - 1] < nums[l]){
                l--;
            }
            if(r + 1 < nums.length && nums[r] < nums[r + 1]){
                r++;
            }
            count += (r + l >> 1) == i ? 1 : 0;
        }
        return count;
    }


    public int binarySearch(int nums[],int k){
        int l = 0, r = nums.length - 1;
        while(l < r){
            int mid = l + r >> 1;
            if(nums[mid] < k){
                l = mid + 1;
            }
            else{
                r = mid;
            }
        }

        return l; // 根据题意， 一定存在， 所以直接 不用 考虑找不到情况
    }

    public static void main(String[] args) {
        int l = 2;
        int nums[] = {1,2,3,4,5,6};
        if(nums[l] < nums[l-- + 1]){
            System.out.println(l);
        }
        System.out.println(l);
    }


}
